<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>



    // 函数的创建方式
    // 1. 命名函数 (声明式创建)  => 函数创建过程中定义函数名, 
    //   注意: 可以直接通过函数名获取函数, 函数不会被调用,输出的是函数封装的内容 (可以理解函数名类似变量名, 可以对应函数名查找该函数)  
    //  函数()

  /*   function sum(a,b){
        return a + b;
    }
    console.log(sum);
    var result = sum(1,2);
    console.log(result);
 */

    // 2 匿名函数  => 函数在创建时没有添加函数名, 无法通过函数名调用该函数

    // 匿名函数没有办法直接单独收声明 
    // function(a,b){  // 语法有问题 => 需要函数名
    //     return a + b;
    // }


    // (2.1)  赋值式 可以将匿名函数存储到变量 / 其他数据类型当中

    // 将匿名函数存储到变量
    /* var sum = function(a,b){
        return a + b;
    }
    console.log(sum);
    var result = sum(10,20);
    console.log(result);
 */
    // 将匿名函数存储到数组
    /* var arr = [1,2,function(a,b){
        return a + b;
    }];

    console.log(arr[2])

    var result = arr[2](100,200);
    console.log(result); */

    // 将匿名函数作为属性值存储到对象
    /* var zhang = {
        name:"张三",
        age:18,
        sum:function(a,b){
            return a + b;
        }
    }
    console.log(zhang.sum);

    var result = zhang.sum(100,200);
    console.log(result);
 */
    // 绑定点击事件 => 元素被点击后执行对应的函数
    // btn.onclick = function(){

    // }


    // (2.2) 自执行函数(自调用函数)  => 匿名函数创建完毕之后立即调用, 此时匿名函数只能执行一次

    // var result = (function(a,b){ 
    //     console.log("函数执行了",a,b);
    //     return a + b;
    // })(10,20);
    // console.log(result);


   /*  var result = !function(a,b){ 
        console.log("函数执行了",a,b);
        return a + b;
    }(10,20);
    console.log(result);

    var result = +function(a,b){ 
        console.log("函数执行了",a,b);
        return a + b;
    }(10,20);
    console.log(result);
    var result = -function(a,b){ 
        console.log("函数执行了",a,b);
        return a + b;
    }(10,20);
    console.log(result);
 */

   

    // 3. 通过官方给定构造函数创建(了解)  => new Function("a","b","return a + b");
    //  注意: new Function执行过程中 最后一个实际参数是执行语句, 除最后参数以外的所有参数都是形式参数


    /* function sum(a,b){
        return a + b;
    } */

    // 通过构造函数创建对象的方式 => 实例化
    // 被创建的对象也叫实例化对象
    // 函数也是一个特殊的实例化对象
    var sum = new Function("a","b","return a + b");   
    console.log(sum);


  

    

    

</script>
</html>